﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GameSchool.Models;

namespace GameSchool.Tests.Controllers
{
    public class MockGameSchoolRepository : IGameSchoolRepository
    {
        List<Achievement> m_Achievements = new List<Achievement>();
        List<Student> m_Students = new List<Student>();
        List<Course> m_Courses = new List<Course>();
        List<Teacher> m_Teachers = new List<Teacher>();
        List<Level> m_Levels = new List<Level>();
        List<Exam> m_Exams = new List<Exam>();
        List<Assignment> m_Assignments = new List<Assignment>();
        List<Lecture> m_Lectures = new List<Lecture>();
        List<Question> m_Questions = new List<Question>();
        List<Answer> m_Answers = new List<Answer>();
        List<Comment> m_Comments = new List<Comment>();
        List<Like> m_Likes = new List<Like>();

//      List<Type> m_Types = new List<Type>();

        public MockGameSchoolRepository(int count)
        {
            for (int i = 0; i < count; i++)
            {
                m_Levels.Add(new Level {levelID = i+1, courseID = 1, title = "Fire Level", description = "woo!", number = i+1, /*unlocked = true,*/ /*levelXP = 1000*/});
             
            }

            Teacher teachy = new Teacher();

            for (int i=0; i<count; i++)
            {
                m_Achievements.Add(new Achievement { achievementID = i + 1, teacherID = (i+1)*2, title = "achievement title", students = m_Students,  description = "course description", courses = m_Courses, teacher = teachy, type = "type"});
            };

          //  m_Students.Add(new Student { exams = 4 };
        }

        public IQueryable<Achievement> Achievements()
        {
            return m_Achievements.AsQueryable();
        }

        public IQueryable<Student> Students()
        {
            return m_Students.AsQueryable();
        }

        public IQueryable<Course> Courses()
        {
            return m_Courses.AsQueryable();
        }

        public IQueryable<Teacher> Teachers()
        {
            return m_Teachers.AsQueryable();
        }

        public IQueryable<Level> Levels()
        {
            return m_Levels.AsQueryable();
        }

        public IQueryable<Exam> Exams()
        {
            return m_Exams.AsQueryable();
        }

        public IQueryable<Assignment> Assignments()
        {
            return m_Assignments.AsQueryable();
        }

        public IQueryable<Lecture> Lectures()
        {
            return m_Lectures.AsQueryable();
        }

        public IQueryable<Question> Questions()
        {
            return m_Questions.AsQueryable();
        }

        public IQueryable<Answer> Answers()
        {
            return m_Answers.AsQueryable();
        }

        public IQueryable<Comment> Comments()
        {
            return m_Comments.AsQueryable();
        }

        public IQueryable<Like> Likes()
        {
            return m_Likes.AsQueryable();
        }


     /*   public void AddTeacher(Teacher theTeacher)
        {
            Teacher mrsSmith = new Teacher();
        }*/



        public IEnumerable<Teacher> GetTeachers()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Teacher> GetTeachers(int id)
        {
            throw new NotImplementedException();
        }

        public void AddTeacher(Teacher theTeacher)
        {
            throw new NotImplementedException();
        }

        public void UpdateTeacher(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteTeacher(int id)
        {
            throw new NotImplementedException();
        }


        public IEnumerable<Course> GetCourses()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Course> GetCourses(int id)
        {
            throw new NotImplementedException();
        }

        public void AddCourse(Course theCourse)
        {
            throw new NotImplementedException();
        }

        public void UpdateCourse(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteCourse(int id)
        {
            throw new NotImplementedException();
        }





        public IEnumerable<Achievement> GetAchievements()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Achievement> GetAchievements(int id)
        {
            throw new NotImplementedException();
        }

        public void AddAchievement(Achievement theAchievement)
        {
            throw new NotImplementedException();
        }

        public void UpdateAchievement(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteAchievement(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Student> GetStudents()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Student> GetStudents(int id)
        {
            throw new NotImplementedException();
        }

        public void AddStudent(Student theStudent)
        {
            throw new NotImplementedException();
        }

        public void UpdateStudent(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteStudent(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Level> GetLevels()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Level> GetLevels(int id)
        {
            throw new NotImplementedException();
        }

        public void AddLevel(Level theLevel)
        {
            throw new NotImplementedException();
        }

        public void UpdateLevel(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteLevel(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Exam> GetExams()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Exam> GetExam(int id)
        {
            throw new NotImplementedException();
        }

        public void UpdateExam(int id)
        {
            throw new NotImplementedException();
        }

        public void UpdateExam(Exam theExam)
        {
            throw new NotImplementedException();
        }

        public void DeleteExam(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Assignment> getAssignments()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Assignment> getAssignments(int id)
        {
            throw new NotImplementedException();
        }

        public int getAssignmentXP(int id)
        {
            throw new NotImplementedException();
        }

        public void addAssignment(Assignment theAssignment)
        {
            throw new NotImplementedException();
        }

        public void updateAssignment(int id)
        {
            throw new NotImplementedException();
        }

        public void deleteAssignment(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Lecture> GetLectures()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Lecture> GetLectures(int id)
        {
            throw new NotImplementedException();
        }

        public void UpdateLecture(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteLecture(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Question> GetQuestions()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Question> GetQuestions(int id)
        {
            throw new NotImplementedException();
        }

        public void AddQuestion(Question theQuestion)
        {
            throw new NotImplementedException();
        }

        public void UpdateQuestion(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteQuestion(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Answer> GetAnswers()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Answer> GetAnswers(int id)
        {
            throw new NotImplementedException();
        }

        public void AddAnswer(Answer theAnswer)
        {
            throw new NotImplementedException();
        }

        public void UpdateAnswer(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteAnswer(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Comment> GetComments()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Comment> GetComments(int id)
        {
            throw new NotImplementedException();
        }

        public void AddComment(Comment theComment)
        {
            throw new NotImplementedException();
        }

        public void UpdateComment(int id)
        {
            throw new NotImplementedException();
        }

        public void DeleteComment(int id)
        {
            throw new NotImplementedException();
        }

        public int GetLikes(int commentID)
        {
            throw new NotImplementedException();
        }

        public void AddLike(int studentID, int commentID)
        {
            throw new NotImplementedException();
        }


        public Student GetStudentLoginRelationship()
        {
            throw new NotImplementedException();
        }

        public Assignment GetAssignmentByID(int id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Assignment> GetAssignmentByCourseID(int theCourseID)
        {
            throw new NotImplementedException();
        }

        public void Save()
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Course> GetCoursesByStudent(Student theStudent)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Level> GetUnlockedLevelsByCourse(Course theCourse)
        {
            throw new NotImplementedException();
        }




        public IEnumerable<Level> GetAllLevelsByCourse(Course theCourse)
        {
            throw new NotImplementedException();
        }


        public IEnumerable<Exam> GetExamsByLevel(Level theLevel)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Assignment> GetAssignmentsByLevel(Level theLevel)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Lecture> GetLecturesByLevel(Level theLevel)
        {
            throw new NotImplementedException();
        }


        public IEnumerable<Level> GetUnlockedLevelsByStudentAndCourse(Student theStudent, Course theCourse)
        {
            throw new NotImplementedException();
        }

        public IQueryable<TeacherCourse> TeacherCourses()
        {
            throw new NotImplementedException();
        }

        public void AddTeacherCourse(int theCourseID, int theTeacherID)
        {
            throw new NotImplementedException();
        }

        public TeacherCourse GetTeacherCourse(int theCourseID, int theTeacherID)
        {
            throw new NotImplementedException();
        }

        public IQueryable<StudentCourse> StudentCourses()
        {
            throw new NotImplementedException();
        }

        public void AddStudentCourse(int theCourseID, int theStudentID)
        {
            throw new NotImplementedException();
        }

        public StudentCourse GetStudentCourse(int theCourseID, int theStudentID)
        {
            throw new NotImplementedException();
        }

        public void AddCourseAchievement(Course theCourse, Achievement theAchievement)
        {
            throw new NotImplementedException();
        }


        public int getXPofStudentAbove(int theCourseID, int theStudentID)
        {
            throw new NotImplementedException();
        }


        public int getXPofStudentBelow(int theCourseID, int theStudentID)
        {
            throw new NotImplementedException();
        }


        public void addStudentAssignment(StudentAssignment stuAss)
        {
            throw new NotImplementedException();
        }

        public void updateAssignment(Assignment theAssignment)
        {
            throw new NotImplementedException();
        }


        public Course GetCourseByID(int id)
        {
            throw new NotImplementedException();
        }

        public void UpdateLecture(Lecture theLecture)
        {
            throw new NotImplementedException();
        }


        Teacher IGameSchoolRepository.GetTeachers(int id)
        {
            throw new NotImplementedException();
        }

        public void UpdateAssignment(Assignment theAssignment)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Teacher> GetTeachersInCourse(Course theCourse)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Student> GetStudentsInCourse(Course theCourse)
        {
            throw new NotImplementedException();
        }


        public IEnumerable<Achievement> GetAchievementsForStudent(Student theStudent)
        {
            throw new NotImplementedException();
        }
    }
}
